iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
Web 3

Smart-Contract Language: Move系列 第 8

Day 8 Tuple and Unit

  • 分享至 

  • xImage
  •  

Tuple

Move 不完全支持 Tuple。但是,為了支持多個返回值,Move 具有類似 Tuple 的表達式。這些表達式在運行時不會產生具體的值,因此它們非常有限:它們只能出現在表達式中(通常在函數的返回位置);不能綁定到局部變量;不能存儲在 struct 中;Tuple 類型不能用於實例化泛型。

Unit

同樣,Unit 是 Move 源語言創建的一種類型,以便基於表達式。Unit 不會產生任何運行時值。我們可以認為 Unit 是一個空 Tuple,任何適用於 Tuple 的限制也適用於 Unit。

schema

(): () // 空的 Tuple, 也稱為 Tuple

(e1, e2, ..., en): (T1, T2, ..., Tn) // n 個 element 的 Tuple

example

address 0x42 {
module Example {

    fun returns_3_values(): (u64, bool, address) {
        (0, false, @0x42)
    }

    fun returns_4_values(x: &u64): (&u64, u8, u128, vector<u8>) {
        (x, 0, 1, b"foobar")
    }
}
}

operations

可以對 Tuple 操作的動作只有解構,可以透過 let 綁定或賦值中被解構

address 0x42 {
module Example {
    // all 3 of these functions are equivalent
    fun returns_unit() {}
    fun returns_2_values(): (bool, bool) { (true, false) }
    fun returns_4_values(x: &u64): (&u64, u8, u128, vector<u8>) { (x, 0, 1, b"foobar") }

    fun examples(cond: bool) {
        let () = ();
        let (x, y): (u8, u64) = (0, 1);
        (x, y) = if (cond) (1, 2) else (3, 4);
    }

    fun examples_with_function_calls() {
        let () = returns_unit();
        let (x, y): (bool, bool) = returns_2_values();

        () = returns_unit();
        (x, y) = returns_2_values();
    }
}
}

讓我們 Move to Day9


上一篇
Day 7 Control Flow
下一篇
Day 9 Struct
系列文
Smart-Contract Language: Move30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言